package com.xbongbong.pro.enums;

import com.xbongbong.i18n.util.I18nMessageUtil;
import com.xbongbong.saas.enums.business.PaySheetEnum;
import lombok.Getter;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;

/**
 * 打印 付款单付款金额 枚举
 * 
 * @author 徐俊杰
 * @date 2020/3/21 16:25
 * @since v1.0
 */
@Getter
public enum PrintPaySheetAmountEnum {

    /**
     * 关联采购合同
     */
    PURCHASE(PaySheetEnum.LINK_PURCHASE.getAttr(), PaySheetEnum.LINK_PURCHASE.getI18nAttrName(),0),
    /**
     * 关联付款计划
     */
    PAY_PLAN(PaySheetEnum.PAY_PLAN.getAttr(), PaySheetEnum.PAY_PLAN.getI18nAttrName(), 1),
    /**
     * 付款金额（对应付款金额明细）
     */
    AMOUNT(PaySheetEnum.AMOUNT.getAttr(), PaySheetEnum.AMOUNT.getI18nAttrName(),2),
    /**
     * 核销金额（对应核销金额明细）
     */
    WRITE_OFF_AMOUNT(PaySheetEnum.WRITE_OFF_AMOUNT.getAttr(), PaySheetEnum.WRITE_OFF_AMOUNT.getI18nAttrName(),2),
    /**
     * 归属人
     */
    BELONG_ID(PaySheetEnum.BELONG_ID.getAttr(), PaySheetEnum.BELONG_ID.getI18nAttrName(),3),
    ;
    private String attr;
    private String name;
    private int sort;

    PrintPaySheetAmountEnum(String attr, String name, int sort) {
        this.attr = attr;
        this.name = name;
        this.sort = sort;
    }


    public static List<PrintPaySheetAmountEnum> getAllEnum() {
        List<PrintPaySheetAmountEnum> list = new ArrayList<>();
        Collections.addAll(list, values());
        return list;
    }

    public static List<PrintPaySheetAmountEnum> getAmountEnum() {
        List<PrintPaySheetAmountEnum> list = new ArrayList<>();
        for (PrintPaySheetAmountEnum cacheCode : values()) {
            if (Objects.equals(cacheCode.attr, WRITE_OFF_AMOUNT.attr)) {
                continue;
            }
            list.add(cacheCode);
        }
        return list;
    }

    public static List<PrintPaySheetAmountEnum> getWriteOffAmountenum() {
        List<PrintPaySheetAmountEnum> list = new ArrayList<>();
        for (PrintPaySheetAmountEnum cacheCode : values()) {
            if (Objects.equals(cacheCode.attr, AMOUNT.attr)) {
                continue;
            }
            list.add(cacheCode);
        }
        return list;
    }

    public static PrintPaySheetAmountEnum getByAttr(String alias) {
        for (PrintPaySheetAmountEnum cacheCode : values()) {
            if (cacheCode.getAttr().equals(alias)) {
                return cacheCode;
            }
        }
        return null;
    }

    public String getName() {
        return I18nMessageUtil.getMessage(name);
    }
}
